<?
/* 	class Autoload
	Основной класс для автозагрузки других классов

	При обращении к любому классу (например Db::get_results(...))
	будет произведена попытка найти и загрузить соответствуй файл (Db.class.php)
	в одной из зарегистрированной директории для автозагрузки.
	Обычно это директории 'system/core', 'system/core/lib' , 
	а также каждая директория модуля  'system/modules/*'
	Регистрация новой директории автозагрузки делается с помощью метода 
	Autoload::register_dir ($dir)
	
*/

function  __autoload($class) { Autoload::load($class);}

class Autoload
{
    
    static $ClassDirs=array('system/core', 'system/core/lib', 'system/lib', 'system/classes');
    
    static public
    function load($class)
    {
        
		static $checked=array();
		static $SYSTEM_ROOT;
		if (!$SYSTEM_ROOT) $SYSTEM_ROOT = cfg()->SYSTEM_ROOT;
		
		$class_key = strtolower($class);
		if (isset($checked[$class_key])) return $checked[$class_key];
		
		$classfile= $class . '.class.php';
        	
		//$classfile = str_replace('_', '/', $classfile); // TODO: пока не пригодилосяь, но может понадобитсья в будущем

        
        foreach (self::$ClassDirs as $dir)
        {
            // формируем полный путь директории 
            if (strpos($dir, $SYSTEM_ROOT)!==0)
                $dir = $SYSTEM_ROOT.'/'. $dir;
            
			if(!is_dir($dir)) continue;

			if ($f = find_file_nocase($dir.'/'.$classfile))
			{
                // pr_( debug_backtrace(), $class,$f);
				// загружаем класс
				require_once($f); 
				
				// инициализируем стандартную переменную $Config в классе модуля, если эта переменная есть в свойствах класса, и если это - модуль 
				//if (strstr(print_r(get_class_vars($class),true),'[Config]') &&  isset(Core::$Modules[$class]))
					//eval("$class::\$Config =& Core::\$Modules['$class'] ;");
				
				return ($checked[$class_key] = TRUE);
            }
        }
		
		// echo "<br/>!!! Не смог загрузить $class<br/>";
        
        return ($checked[$class_key] = FALSE);
    }
    
    static public
    function register_dir ($dir)
    {
        if (is_array($dir)) // в массиве можно передать несколько директорий 
            self::$ClassDirs+= $dir;
        else    
            self::$ClassDirs[]=$dir;
        
    }
    
}

